x
depth = 3
N = 2**depth
arr = [0]*(2*N-1)
arr
!pip install graphviz
from graphviz import Digraph
x
depth = 3
N = 2**depth
arr = list(range(2*N-1))
print(arr)
g = Digraph()
for i in range(N-1):
g.edge(f'{i}', f'{2*i+1}')
g.edge(f'{i}', f'{2*i+2}')
g
x
depth = 3
N = 2**depth
arr = list(range(2*N-1))
print(arr)
g = Digraph()
for i in range(len(arr)):
g.node(f'{i}', label=f'{i}\n{arr[i]}')
for i in range(N-1):
g.edge(f'{i}', f'{2*i+1}')
g.edge(f'{i}', f'{2*i+2}')
g
depth = 3
N = 2**depth
arr = [0 for _ in range(2*N-1)]
print(arr)
g = Digraph()
for i in range(len(arr)):
g.node(f'{i}', label=f'<<font color="green">{i}</font>|<font color="blue">{arr[i]}</font>>', shape='record')
for i in range(N-1):
g.edge(f'{i}', f'{2*i+1}')
g.edge(f'{i}', f'{2*i+2}')
g
x
depth = 3
N = 2**depth
arr = [None for _ in range(2*N-1)]
for i in range(N):
arr[-N+i] = i #leaves
print(arr)
g = Digraph()
for i in range(len(arr)):
g.node(f'{i}', label=f'<<font color="green">{i}</font>|<font color="blue">{arr[i]}</font>>', shape='record')
for i in range(N-1):
g.edge(f'{i}', f'{2*i+1}')
g.edge(f'{i}', f'{2*i+2}')
g
depth = 3
N = 2**depth
arr = [None for _ in range(2*N-1)]
for i in range(N):
arr[-N+i] = i #leaves
for i in range(N-2, -1, -1):
arr[i] = arr[2*i+1]+arr[2*i+2]
print(arr)
g = Digraph()
for i in range(len(arr)):
g.node(f'{i}', label=f'<<font color="green">{i}</font>|<font color="blue">{arr[i]}</font>>', shape='record')
for i in range(N-1):
g.edge(f'{i}', f'{2*i+1}')
g.edge(f'{i}', f'{2*i+2}')
g
depth = 3
N = 2**depth
arr = [None for _ in range(2*N-1)]
for i in range(N):
arr[-N+i] = i #leaves
for i in range(N-2, -1, -1):
arr[i] = arr[2*i+1]+arr[2*i+2]
print(arr)
g = Digraph()
for i in range(len(arr)):
g.node(f'{i}', label=f'<<font color="green">{i}</font>|<font color="blue">{arr[i]}</font>>', shape='record', style='dotted' if i in highlighted)
for i in range(N-1):
g.edge(f'{i}', f'{2*i+1}')
g.edge(f'{i}', f'{2*i+2}')
g
x
depth = 3
N = 2**depth
arr = [None for _ in range(2*N-1)]
for i in range(N):
arr[-N+i] = i #leaves
for i in range(N-2, -1, -1):
arr[i] = arr[2*i+1]+arr[2*i+2]
print(arr)
highlighted = [10,3,2] #for message with index 2
g = Digraph()
for i in range(len(arr)):
g.node(f'{i}', label=f'<<font color="green">{i}</font>|<font color="blue">{arr[i]}</font>>', shape='record',
style=f'{"dotted" if i in highlighted else "solid"}')
for i in range(N-1):
g.edge(f'{i}', f'{2*i+1}')
g.edge(f'{i}', f'{2*i+2}')
g
depth = 3
N = 2**depth
arr = [None for _ in range(2*N-1)]
for i in range(N):
arr[-N+i] = i #leaves
for i in range(N-2, -1, -1):
arr[i] = arr[2*i+1]+arr[2*i+2]
print(arr)
ind = 9 #for message with index 2
highlighted = [10,3,2]
rooted = [9,4,1]
g = Digraph()
for i in range(len(arr)):
g.node(f'{i}', label=f'<<font color="green">{i}</font>|<font color="{"red" if i == ind else "orange" if i in highlighted else "blue"}">{arr[i]}</font>>', shape='record',
style=f'{"dotted" if i in highlighted else "solid"}')
for i in range(N-1):
g.edge(f'{i}', f'{2*i+1}', color="red" if 2*i+1 in rooted else "black")
g.edge(f'{i}', f'{2*i+2}', color="red" if 2*i+2 in rooted else "black")
g
y = 2
ind = N-1+y
print(ind)
ind = 9
rooted = []
while ind > 0:
rooted.append(ind)
ind = (ind-1) // 2
rooted.append(0)
rooted
x
for ind in [9, 10]:
print(ind, ind+(1 if ind % 2 == 1 else -1))
y = 2
ind = N-1+y
highlighted = []
while ind > 0:
highlighted.append(ind+(1 if ind % 2 == 1 else -1))
ind = (ind-1) // 2
highlighted
y = 6
ind = N-1+y
highlighted = []
while ind > 0:
highlighted.append(ind+(1 if ind % 2 == 1 else -1))
ind = (ind-1) // 2
highlighted